import VueRouter, { Route } from 'vue-router'
import { Vue } from 'vue-property-decorator'
import domGuide from '@src/common/Guide'

export interface CommonComponentInstance {
  $route: Route,
  $router: VueRouter
}

export type EmitEvent = (event: string, ...args: any[]) => void
export default class VC extends Vue {
  constructor() {
    super();
  }
  // 安装方法
  static install: (Vue: any) => void
  // 属性
  // 其实在 vue 里面 $props 是只读的，修改会报错 $props is readonly
  // readonly $props: Props = (super.$props || {}) as Props
  readonly $Guide!: any
  
  /** 
   * 之前这里的写法是 readonly $refs!: any 
   * 有添加非空断言操作符，因为 vue 在初始化声明周期的时候，会将 $refs 设置为 空对象。且没有清除 refs 的地方。所以不存在为空的情况。可以查看下面的链接。
   * https://github.com/vuejs/vue/blob/e0b26c483a1ba407a818b1fcba1a439df24e84a8/src/core/instance/lifecycle.ts#L34
   * 这个是 ref 的创建，更新，销毁，均不会清除 $refs
   * https://github.com/vuejs/vue/blob/7a3aa3faac6b8eb066f32813788b4c1d16f34c6b/src/core/vdom/modules/template-ref.ts#L14
   * 
   * 但是这里由于没有初始化，导致 VC $refs 为 undefined，vue-class-component 相关的初始化组件的方法，里面把 undefined 赋值给了 Vue $refs，所以会报错。
   * https://github.com/vuejs/vue-class-component/blob/master/src/data.ts#L22
  */
  readonly $refs: any = super.$refs || {}
  
  readonly $fast!: {
    biz: {
      initVersionLimitDialog: () => Vue,
      initTeamSelect: () => Vue,
    }
  }
  
  public bem(name: string) {
    // 
  }
}
